Ultra Light.NET を使用した同期プログレス・バーの実装

 
 
アプリケーションを同期する際には、ステータス・プログレス・バーの表示が役立ちます。このドキュメントでは、VB.NET を使用して Ultra Light.NET アプリケーションにプログレス・バーを実装する方法について説明します。
 

必要なソフトウェア
  1. SQL Anywhere 10
  2. Visual Studio 2005
  3. CustDB Ultra Light サンプル


事前要件

このドキュメントは、ユーザが以下について理解していることを前提としています。
  1. Visual Studio 2005
  2. .NET Framework 1.1 および 2.0
  3. Ultra Light および Mobile Link


目標

このドキュメントでは、既存の CustDB Sync ダイアログを修正して、プログレス・バーを追加する方法について説明します。このプログレス・バーによって、ユーザは同期の進捗状況に関するより詳細な情報を確認できます。以下の手順に従って、プログレス・バーを追加します。
  1. CustDB プロジェクトを Visual Studio 2005 にロード
  2. プログレス・バーをプロジェクトに追加
  3. プログレス・バーを実装するためのコードを追加
  4. Mobile Link を実行
  5. アプリケーションを導入
  6. 同期を実行


手順 1: CustDB ソリューションを Visual Studio 2005 にロード
  1. SQL Anywhere 10 サンプル・ディレクトリ内の CustDB サンプルへ移動します。デフォルトでは、このサンプルは ‘C:\Documents and Settings\All Users\Documents\SQL Anywhere 10\Samples\UltraLite.NET\CustDB\ce\vs8’ にインストールされています。
  2. ustDB.sln ファイルをロードします。


手順 2:プログレス・バーをプロジェクトに追加

  1. [ソリューションエクスプローラー] で、SyncProgressDialog.vb ファイルをダブルクリックします。



  2. ToolBox からステータス・バーをドラッグして、[status sync] ダイアログの下に配置します。以下のスクリーンショットを参照してください。

    例:






手順 3:プログレス・バーを実装するためのコードを追加

  1. ProgressBar に以下のプロパティを設定します。
    a. Name: progress
    b. Maximum: 100
    c. Minimum: 1
    d. Value: 1
  2. SyncProgressDialog.vb のコードを開き、以下の関数まで移動します。
    Public Overridable Function SyncProgressed(_)

  3. Select Case の順序が以下のように設定されていることを確認してください。プログレス・バーを正しく動作させるためには、この順序が非常に重要となります。

    Select Case data.State

    Case ULSyncProgressState.STATE_STARTING
                         :
                         :
    CaseULSyncProgressState.STATE_CANCELLED
                         :
                         :
    Case ULSyncProgressState.STATE_CONNECTING
                         :
                         :
    Case ULSyncProgressState.STATE_SENDING_HEADER
                         :
    Case ULSyncProgressState.STATE_SENDING_TABLE
                         :
                         :
    Case ULSyncProgressState.STATE_SENDING_DATA
                         :
                         :
    Case ULSyncProgressState.STATE_FINISHING_UPLOAD
                         :
                         :
    Case ULSyncProgressState.STATE_RECEIVING_UPLOAD_ACK
                         :
                         :
    Case ULSyncProgressState.STATE_RECEIVING_TABLE
                         :
                         :
    Case ULSyncProgressState.STATE_RECEIVING_DATA
                         :
                         :
    Case ULSyncProgressState.STATE_COMMITTING_DOWNLOAD
                         :
                         :
    Case ULSyncProgressState.STATE_SENDING_DOWNLOAD_ACK
                         :
                         :
    Case ULSyncProgressState.STATE_DISCONNECTING
                         :
                         :
    Case ULSyncProgressState.STATE_DONE
                         :
                         :
    Case ULSyncProgressState.STATE_ERROR
                         :
                         :
    End Select

  4. コードを追加します。アルゴリズムは、以下のとおりです。
    a. プログレス・バーを進める必要のあるケース数を判断します。この例では、バーを進める必要があるケースが 11 ケース、バーを動かさないケースが 3 ケースあります。最初のケースから開始して、1 ずつ増分させ、ケース総数で割ります。たとえば、Case Case ULSyncProgressState.STATE_STARTING では 1/11 であり、2 番目のケース Case
    ULSyncProgressState.STATE_CANCELLED ではプログレス・バーは進まず、Case
    ULSyncProgressState.STATE_CONNECTING では 2/11 となり、以降も同様に続きます。

    b. グローバル変数 (この例では、_percentage) を作成します。たとえば、Private _percentage As Double です。
    この変数は、変数を宣言する以下のセクションで作成できます。

    Private _allowClose As Boolean ' Tells OnClosing to proceed

    Private _doDialog As Boolean ' Tells ShowDialog to process events

    Private _inSync As Boolean ' Used to interpret the Close button

    Private _syncCancelled As Boolean

    Private _dismiss As Boolean

    Private _conn As ULConnection

    Private _resources As ResourceManager

    Private _syncSQLCode As ULSQLCode

    Private _cancelString As String

    Private _dismissString As String

    Private WithEvents _cancelAs System.Windows.Forms.Button

    Private _sentLabel As System.Windows.Forms.Label

    Private _recLabel As System.Windows.Forms.Label

    Private _insertLabel As System.Windows.Forms.Label

    Private _updateLabel As System.Windows.Forms.Label

    Private _deleteLabel As System.Windows.Forms.Label

    Private _bytesLabel As System.Windows.Forms.Label

    Private _insertsSent As System.Windows.Forms.Label

    Private _updatesSent As System.Windows.Forms.Label

    Private _deletesSent As System.Windows.Forms.Label

    Private _bytesSent As System.Windows.Forms.Label

    Private _insertsRec As System.Windows.Forms.Label

    Private _updatesRec As System.Windows.Forms.Label

    Private _deletesRec As System.Windows.Forms.Label

    Private _bytesRec As System.Windows.Forms.Label
    Private _message As System.Windows.Forms.TextBox

    Friend WithEvents progress As System.Windows.Forms.ProgressBar

    Private WithEvents _timer As System.Windows.Forms.Timer

    Private _percentage As Double 'to support progressbar

  5. グローバル変数が作成された後、以下の太字の行を既存の select case コードに追加します。

    Select Case data.State
    Case ULSyncProgressState.STATE_STARTING
    _percentage = (1 / 11)
    Case ULSyncProgressState.STATE_CANCELLED
    msg = GetMessage(data)
    Case ULSyncProgressState.STATE_CONNECTING
    msg = GetMessage(data)

    _percentage = (2 / 11)
    Case ULSyncProgressState.STATE_SENDING_HEADER
    msg = GetMessage(data)

    _percentage = (3 / 11)
    Case ULSyncProgressState.STATE_SENDING_TABLE
    msg = GetMessage(data)

    _percentage = (4 / 11)
    Case ULSyncProgressState.STATE_SENDING_DATA
    _insertsSent.Text = data.SentInserts.ToString()

    _updatesSent.Text = data.SentUpdates.ToString()

    _deletesSent.Text = data.SentDeletes.ToString()
    Case ULSyncProgressState.STATE_FINISHING_UPLOAD
    _insertsSent.Text = data.SentInserts.ToString()

    _updatesSent.Text = data.SentUpdates.ToString()

    _deletesSent.Text = data.SentDeletes.ToString()

    _percentage = (5 / 11)
    Case ULSyncProgressState.STATE_RECEIVING_UPLOAD_ACK
    msg = GetMessage(data)

    _percentage = (6 / 11)
    Case ULSyncProgressState.STATE_RECEIVING_TABLE
    msg = GetMessage(data)

    _percentage = (7 / 11)
    Case ULSyncProgressState.STATE_RECEIVING_DATA
    _insertsRec.Text = data.ReceivedInserts.ToString()

    _updatesRec.Text = data.ReceivedUpdates.ToString()

    _deletesRec.Text = data.ReceivedDeletes.ToString()
    Case ULSyncProgressState.STATE_COMMITTING_DOWNLOAD
    _insertsRec.Text = data.ReceivedInserts.ToString()

    _updatesRec.Text = data.ReceivedUpdates.ToString()

    _deletesRec.Text = data.ReceivedDeletes.ToString()

    _percentage = (8 / 11)
    Case ULSyncProgressState.STATE_SENDING_DOWNLOAD_ACK
    msg = GetMessage(data)

    _percentage = (9 / 11)
    Case ULSyncProgressState.STATE_DISCONNECTING
    msg = GetMessage(data)

    _percentage = (10 / 11)
    Case ULSyncProgressState.STATE_DONE
    msg = GetMessage(data)

    _percentage = (11 / 11)
    Case ULSyncProgressState.STATE_ERROR
    msg = GetErrorMessage(data.SQLCode, data.ErrorMessage, data.SyncResult.UploadOK)
      ' Change Cancel button to dismiss
    _cancel.Text = _dismissString

    _dismiss = True
    End Select

    If Not msg Is Nothing Then
    _message.Text = msg
    End If

    If data.State <> ULSyncProgressState.STATE_LAST Then
    _bytesSent.Text = data.SentBytes.ToString()

    _bytesRec.Text = data.ReceivedBytes.ToString()
    End If
    Application.DoEvents()

    ' Update the progress bar value

    progress.Value = CInt(100 * (_percentage))

    Return _syncCancelled

  6. プロジェクトを保存します。
  7. プロジェクトをビルドします。
  8. 構文エラーがある場合は、修正します。


注:この例では、進捗率を計算する必要のないケースが 3 つあります。
  1. ULSyncProgressState.STATE_CANCELLED
  2. ULSyncProgressState.STATE_SENDING_DATA
  3. ULSyncProgressState.STATE_RECEIVING_DATA

その最初のケースでは、ユーザが取り消し操作を実行した場合に計算を実行しません。残りの 2 ケースでは、テーブルごとに計算が実行されます。
たとえば、テーブルごとのデータが統合データベースに送信されると STATE_SENDING_DATA を実行します。統合データベースからテーブルごとのデータを受け取ると STATE_RECEIVING_DATA を実行します。これらのケースで計算を実行すると、プログレス・バーが前後に移動して数値も変動します。そのため、これらの 2 つのケースでは、バーが動かないように設定します。


手順 4: Mobile Link を実行

Mobile Link サーバを実行します。

  1. [スタート] . [プログラム] - [SQL Anywhere 10] - [MobileLink] - [MobileLink サーバーのサンプル] を選択しま
    す。
    Mobile Link サーバが起動し、新しい要求を待ちます。




手順 5:アプリケーションを導入

  1. Visual Studio で [F5] を押します。
    ソリューションを、エミュレータまたは物理デバイスに導入できます。
  2. アプリケーションを初めて導入すると、ユーザ ID の入力ダイアログが表示されます。デフォルト値である ID 50 を選択します。


手順 6:同期を実行

デフォルト画面で [OK] をクリックすると、アプリケーションは自動的に同期します。以下の手順に従って、手動で同期を開始することもできます。

  1. アプリケーションを実行しているデバイスまたはエミュレータで [File] をクリックします。
  2. [Synchronize] をクリックします。

以下の画面が表示されます。

BACK : 技術情報(TechDoc)のトップページ
 
このウインドウを閉じる
 
Copyright 2008 iAnywhere Solutions, Inc.